home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / minix / up1510b.tgz / up1510b / doc / zmodem.doc < prev   
Text File  |  1990-07-19  |  73KB  |  2,377 lines

  1.  
  2.  
  3.  
  4.                   - 1 -
  5.  
  6.  
  7.  
  8.              XMODEM/YMODEM PROTOCOL REFERENCE
  9.          A compendium of documents describing the
  10.  
  11.                 XMODEM and YMODEM
  12.  
  13.              File Transfer Protocols
  14.  
  15.  
  16.             Following the protocol description are the man pages
  17.  
  18.            This    document was formatted 9-11-86.
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.              Edited    by Chuck Forsberg
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.          Please    distribute as widely as    possible.
  42.  
  43.                Questions to Chuck Forsberg
  44.  
  45.  
  46.  
  47.  
  48.  
  49.                Omen    Technology Inc
  50.             17505-V    Sauvie Island Road
  51.               Portland Oregon 97231
  52.                Voice: 503-621-3406
  53.         Modem (Telegodzilla): 503-621-3746 Speed 1200,300
  54.               Compuserve: 70007,2304
  55.             UUCP: ...!tektronix!reed!omen!caf
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.                   - 2 -
  71.  
  72.  
  73.  
  74. 1.  ROSETTA STONE
  75.  
  76. Here are some definitions which    reflect    the current vernacular in the
  77. computer media.     The attempt here is identify the file transfer    protocol
  78. rather than specific programs.
  79.  
  80. XMODEM    refers to the original 1979 file transfer etiquette introduced by
  81.     Ward Christensen's 1979    MODEM2 program.     It's also called the
  82.     MODEM or MODEM2    protocol.  Some    who are    unaware    of MODEM7's
  83.     unusual    batch file mode    call it    MODEM7.     Other aliases include
  84.     "CP/M Users's Group" and "TERM II FTP 3".  This    protocol is
  85.     supported by every serious communications program because of its
  86.     universality, simplicity, and reasonable performance.
  87.  
  88. XMODEM/CRC replaces XMODEM's 1 byte checksum with a two    byte Cyclical
  89.     Redundancy Check (CRC-16), giving modern error detection
  90.     protection.
  91.  
  92. XMODEM-1k Refers to the    XMODEM/CRC protocol with 1024 byte data    blocks.
  93.  
  94. YMODEM    refers to the XMODEM/CRC (optional 1k blocks) protocol with the
  95.     batch transmission described below.
  96.  
  97. ZMODEM    uses familiar XMODEM/CRC and YMODEM technology in a new    protocol
  98.     that provides reliability, throughput, file management,    and user
  99.     amenities appropriate to contemporary data communications.
  100.  
  101.  
  102. 2.  YET    ANOTHER    PROTOCOL?
  103.  
  104. Since its development half a decade ago, the Ward Christensen modem
  105. protocol has enabled a wide variety of computer    systems    to interchange
  106. data.  There is    hardly a communications    program    that doesn't at    least
  107. claim to support this protocol.
  108.  
  109. Recent advances    in computing, modems and networking have revealed a number
  110. of weaknesses in the original protocol:
  111.  
  112.    + The short block length caused throughput to suffer    when used with
  113.      timesharing systems, packet switched networks, satellite circuits,
  114.      and buffered (error correcting) modems.
  115.  
  116.    + The 8 bit arithmetic checksum and other aspects allowed line
  117.      impairments to interfere with dependable, accurate    transfers.
  118.  
  119.    + Only one file could be sent per command.  The file    name had to be
  120.      given twice, first    to the sending program and then    again to the
  121.      receiving program.
  122.  
  123.    + The transmitted file could    accumulate as many as 127 extraneous
  124.      bytes.
  125.  
  126.  
  127.  
  128. Chapter    2
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. X/YMODEM Protocol Reference     09-11-86                 3
  137.  
  138.  
  139.  
  140.    + The modification date of the file was lost.
  141.  
  142. A number of other protocols have been developed    over the years,    but none
  143. have displaced XMODEM to date:
  144.  
  145.    + Lack of public domain documentation and example programs have kept
  146.      proprietary protocols such    as MNP,    Blast, and others tightly bound    to
  147.      the fortunes of their suppliers.
  148.  
  149.    + Complexity    discourages the    widespread application of BISYNC, SDLC,
  150.      HDLC, X.25, and X.PC protocols.
  151.  
  152.    + Performance compromises and moderate complexity have limited the
  153.      popularity    of the Kermit protocol,    which was developed to allow file
  154.      transfers in environments hostile to XMODEM.
  155.  
  156. The XMODEM protocol extensions and YMODEM Batch    address    these weaknesses
  157. while maintaining XMODEM's simplicity.
  158.  
  159. YMODEM is supported by the public domain programs YAM (CP/M),
  160. YAM(CP/M-86), YAM(CCPM-86), IMP    (CP/M),    KMD (CP/M), rz/sz (Unix, Xenix,
  161. VMS, Berkeley Unix, Venix, Xenix, Coherent, IDRIS, Regulus).  Commerical
  162. implementations    include    MIRROR,    and Professional-YAM.[1] Communications
  163. programs supporting these extensions have been in use since 1981.
  164.  
  165. The 1k packet length (XMODEM-1k) described below may be    used in
  166. conjunction with YMODEM    Batch Protocol,    or with    single file transfers
  167. identical to the XMODEM/CRC protocol except for    minimal    changes    to support
  168. 1k packets.
  169.  
  170. Another    extension is simply called the g option.  It provides maximum
  171. throughput when    used with end to end error correcting media, such as X.PC
  172. and error correcting modems, including the emerging 9600 bps units by
  173. Electronic Vaults and others.
  174.  
  175. To complete this tome, Ward Christensen's original protocol document and
  176. John Byrns's CRC-16 document are included for reference.
  177.  
  178. References to the MODEM    or MODEM7 protocol have    been changed to    XMODEM to
  179. accommodate the    vernacular.  In    Australia, it is properly called the
  180. Christensen Protocol.
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187. __________
  188.  
  189.  1. Available for IBM PC,XT,AT,    Unix and Xenix
  190.  
  191.  
  192.  
  193.  
  194. Chapter    2
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. X/YMODEM Protocol Reference     09-11-86                 4
  203.  
  204.  
  205.  
  206. 2.1  Some Messages from    the Pioneer
  207.  
  208. #: 130940 S0/Communications 25-Apr-85  18:38:47
  209. Sb: my protocol
  210. Fm: Ward Christensen 76703,302 (EDITED)
  211. To: all
  212.  
  213. Be aware the article[2]    DID quote me correctly in terms    of the phrases
  214. like "not robust", etc.
  215.  
  216. It was a quick hack I threw together, very unplanned (like everything I
  217. do), to    satisfy    a personal need    to communicate with "some other" people.
  218.  
  219. ONLY the fact that it was done in 8/77,    and that I put it in the public
  220. domain immediately, made it become the standard    that it    is.
  221.  
  222. I think    its time for me    to
  223.  
  224. (1) document it; (people call me and say "my product is    going to include
  225. it - what can I    'reference'", or "I'm writing a    paper on it, what do I put
  226. in the bibliography") and
  227.  
  228. (2) propose an "incremental extension" to it, which might take "exactly"
  229. the form of Chuck Forsberg's YAM protocol.  He wrote YAM in C for CP/M and
  230. put it in the public domain, and wrote a batch protocol    for Unix[3] called
  231. rb and sb (receive batch, send batch), which was basically XMODEM with
  232.    (a) a record    0 containing filename date time    and size
  233.    (b) a 1K block size option
  234.    (c) CRC-16.
  235.  
  236. He did some clever programming to detect false ACK or EOT, but basically
  237. left them the same.
  238.  
  239. People who suggest I make SIGNIFICANT changes to the protocol, such as
  240. "full duplex", "multiple outstanding blocks", "multiple    destinations", etc
  241. etc don't understand that the incredible simplicity of the protocol is one
  242. of the reasons it survived to this day in as many machines and programs    as
  243. it may be found    in!
  244.  
  245. Consider the PC-NET group back in '77 or so - documenting to beat the band
  246. - THEY had a protocol, but it was "extremely complex", because it tried    to
  247. be "all    things to all people" -    i.e. send binary files on a 7-bit system,
  248. etc.  I    was not    that "benevolent". I (emphasize    > I < )    had an 8-bit UART,
  249.  
  250.  
  251. __________
  252.  
  253.  2. Infoworld April 29 p. 16
  254.  
  255.  3. VAX/VMS versions of    these programs are also    available.
  256.  
  257.  
  258.  
  259.  
  260. Chapter    2
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. X/YMODEM Protocol Reference     09-11-86                 5
  269.  
  270.  
  271.  
  272. so "my protocol    was an 8-bit protocol",    and I would just say "sorry" to
  273. people who were    held back by 7-bit limitations.     ...
  274.  
  275. Block size: Chuck Forsberg created an extension    of my protocol,    called
  276. YAM, which is also supported via his public domain programs for    UNIX
  277. called rb and sb - receive batch and send batch.  They cleverly    send a
  278. "block 0" which    contains the filename, date, time, and size.
  279. Unfortunately, its UNIX    style, and is a    bit weird[4] - octal numbers, etc.
  280. BUT, it    is a nice way to overcome the kludgy "echo the chars of    the name"
  281. introduced with    MODEM7.     Further, chuck    uses CRC-16 and    optional 1K
  282. blocks.     Thus the record 0, 1K,    and CRC, make it a "pretty slick new
  283. protocol" which    is not significantly different from my own.
  284.  
  285. Also, there is a catchy    name - YMODEM.    That means to some that    it is the
  286. "next thing after XMODEM", and to others that it is the    Y(am)MODEM
  287. protocol.  I don't want    to emphasize that too much - out of fear that
  288. other mfgrs might think    it is a    "competitive" protocol,    rather than an
  289. "unaffiliated" protocol.  Chuck    is currently selling a much-enhanced
  290. version    of his CP/M-80 C program YAM, calling it Professional Yam, and its
  291. for the    PC - I'm using it right    now.  VERY slick!  32K capture buffer,
  292. script,    scrolling, previously captured text search, plus built-in commands
  293. for just about everything - directory (sorted every which way),    XMODEM,
  294. YMODEM,    KERMIT,    and ASCII file upload/download,    etc.  You can program it
  295. to "behave" with most any system - for example when trying a number for
  296. CIS it detects the "busy" string back from the modem and substitutes a
  297. diff phone # into the dialing string and branches back to try it.
  298.  
  299.  
  300.  
  301. 3.  XMODEM PROTOCOL ENHANCEMENTS
  302.  
  303. This chapter discusses the protocol extensions to Ward Christensen's 1982
  304. XMODEM protocol    description document.
  305.  
  306. The original document recommends the user be asked whether to continue
  307. trying or abort    after 10 retries.  Most    programs no longer ask the
  308. operator whether he wishes to keep retrying.  Virtually    all correctable
  309. errors are corrected within the    first few retransmissions.  If the line    is
  310. so bad that ten    attempts are insufficient, there is a significant danger
  311. of undetected errors.  If the connection is that bad, it's better to
  312. redial for a better connection,    or mail    a floppy disk.
  313.  
  314.  
  315.  
  316.  
  317.  
  318. __________
  319.  
  320.  4. The    file length, time, and file mode are optional.    The pathname and
  321.     file length    may be sent alone if desired.
  322.  
  323.  
  324.  
  325.  
  326. Chapter    3                      XMODEM Protocol Enhancements
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. X/YMODEM Protocol Reference     09-11-86                 6
  335.  
  336.  
  337.  
  338. 3.1  Graceful Abort
  339.  
  340. The YAM    and Professional-YAM X/YMODEM routines recognize a sequence of two
  341. consecutive CAN    (Hex 18) characters without modem errors (overrun,
  342. framing, etc.) as a transfer abort command.  This sequence is recognized
  343. when YAM is waiting for    the beginning of a packet or for an acknowledge    to
  344. one that has been sent.     The check for two consecutive CAN characters
  345. virtually eliminates the possibility of    a line hit aborting the    transfer.
  346. YAM sends eight    CAN characters when it aborts an XMODEM, YMODEM, or ZMODEM
  347. protocol file transfer.     Pro-YAM then sends eight backspaces to    delete the
  348. CAN characters from the    remote's keyboard input    buffer,    in case    the remote
  349. had already aborted the    transfer and was awaiting a keyboarded command.
  350.  
  351.  
  352. 3.2  CRC-16 Option
  353.  
  354. The XMODEM protocol uses an optional two character CRC-16 instead of the
  355. one character arithmetic checksum used by the original protocol    and by
  356. most commercial    implementations.  CRC-16 guarantees detection of all
  357. single and double bit errors,  all errors with an odd number of    error
  358. bits, all burst    errors of length 16 or less, 99.9969% of all 17-bit error
  359. bursts,    and 99.9984 per    cent of    all possible longer error bursts.  By
  360. contrast, a double bit error, or a burst error of 9 bits or more can sneak
  361. past the XMODEM    protocol arithmetic checksum.
  362.  
  363. The XMODEM/CRC protocol    is similar to the XMODEM protocol, except that the
  364. receiver specifies CRC-16 by sending C (Hex 43)    instead    of NAK when
  365. requesting the FIRST packet.  A    two byte CRC is    sent in    place of the one
  366. byte arithmetic    checksum.
  367.  
  368. YAM's c    option to the r    command    enables    CRC-16 in single file reception,
  369. corresponding to the original implementation in    the MODEM7 series
  370. programs.  This    remains    the default because many commercial communications
  371. programs and bulletin board systems still do not support CRC-16,
  372. especially those written in Basic or Pascal.
  373.  
  374. XMODEM protocol    with CRC is accurate provided both sender and receiver
  375. both report a successful transmission.    The protocol is    robust in the
  376. presence of characters lost by buffer overloading on timesharing systems.
  377.  
  378. The single character ACK/NAK responses generated by the    receiving program
  379. adapt well to split speed modems, where    the reverse channel is limited to
  380. ten per    cent or    less of    the main channel's speed.
  381.  
  382. XMODEM and YMODEM are half duplex protocols which do not attempt to
  383. transmit information and control signals in both directions at the same
  384. time.  This avoids buffer overrun problems that    have been reported by
  385. users attempting to exploit full duplex    asynchronous file transfer
  386. protocols such as Blast.
  387.  
  388. Professional-YAM adds several proprietary logic    enhancements to    XMODEM's
  389.  
  390.  
  391.  
  392. Chapter    3                      XMODEM Protocol Enhancements
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. X/YMODEM Protocol Reference     09-11-86                 7
  401.  
  402.  
  403.  
  404. error detection    and recovery.  These compatible    enhancements eliminate
  405. most of    the bad    file transfers other programs make when    using the XMODEM
  406. protocol under less than ideal conditions.
  407.  
  408.  
  409. 3.3  XMODEM-1k 1024 Byte Packet
  410.  
  411. The choice to use 1024 byte packets is expressed to the    sending    program    on
  412. its command line or selection menu.[1] 1024 byte packets improve
  413. throughput in many applications, but some environments cannot accept 1024
  414. byte bursts, especially    minicomuters running 19.2kb ports.
  415.  
  416. An STX (02) replaces the SOH (01) at the beginning of the transmitted
  417. block to notify    the receiver of    the longer packet length.  The transmitted
  418. packet contains    1024 bytes of data.  The receiver should be able to accept
  419. any mixture of 128 and 1024 byte packets.  The packet number is
  420. incremented by one for each packet regardless of the packet length.
  421.  
  422. The sender must    not change between 128 and 1024    byte packet lengths if it
  423. has not    received a valid ACK for the current packet.  Failure to observe
  424. this restriction allows    certain    transmission errors to pass undetected.
  425.  
  426. If 1024    byte packets are being used, it    is possible for    a file to "grow"
  427. up to the next multiple    of 1024    bytes.    This does not waste disk space if
  428. the allocation granularity is 1k or greater.  With YMODEM batch
  429. transmission, the optional file    length transmitted in the file name packet
  430. allows the receiver to discard the padding, preserving the exact file
  431. length and contents.
  432.  
  433. 1024 byte packets may be used with batch file transmission or with single
  434. file transmission.  CRC-16 should be used with the k option to preserve
  435. data integrity over phone lines.  If a program wishes to enforce this
  436. recommendation,    it should cancel the transfer, then issue an informative
  437. diagnostic message if the receiver requests checksum instead of    CRC-16.
  438. Under no circumstances may a sending program use CRC-16    unless the
  439. receiver commands CRC-16.
  440.  
  441.  
  442. 4.  YMODEM Batch File Transmission
  443.  
  444. The YMODEM Batch protocol is an    extension to the XMODEM/CRC protocol that
  445. allows 0 or more files to be transmitted with a    single command.     (Zero
  446. files may be sent if none of the requested files is accessible.) The
  447. design approach    of the YMODEM Batch protocol is    to use the normal routines
  448. for sending and    receiving XMODEM packets in a layered fashion similar to
  449.  
  450.  
  451. __________
  452.  
  453.  1. See    "KMD/IMP Exceptions to YMODEM" below.
  454.  
  455.  
  456.  
  457.  
  458. Chapter    4                      XMODEM Protocol Enhancements
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. X/YMODEM Protocol Reference     09-11-86                 8
  467.  
  468.  
  469.  
  470.       Figure 1.  1024 byte Packets
  471.  
  472.       SENDER                  RECEIVER
  473.                           "s -k    foo.bar"
  474.       "foo.bar open    x.x minutes"
  475.                           C
  476.       STX 01 FE Data[1024] CRC CRC
  477.                           ACK
  478.       STX 02 FD Data[1024] CRC CRC
  479.                           ACK
  480.       STX 03 FC Data[1000] CPMEOF[24] CRC CRC
  481.                           ACK
  482.       EOT
  483.                           ACK
  484.  
  485.       Figure 2.  Mixed 1024    and 128    byte Packets
  486.  
  487.       SENDER                  RECEIVER
  488.                           "s -k    foo.bar"
  489.       "foo.bar open    x.x minutes"
  490.                           C
  491.       STX 01 FE Data[1024] CRC CRC
  492.                           ACK
  493.       STX 02 FD Data[1024] CRC CRC
  494.                           ACK
  495.       SOH 03 FC Data[128] CRC CRC
  496.                           ACK
  497.       SOH 04 FB Data[100] CPMEOF[28] CRC CRC
  498.                           ACK
  499.       EOT
  500.                           ACK
  501.  
  502. packet switching methods.
  503.  
  504. Why was    it necessary to    design a new batch protocol when one already
  505. existed    in MODEM7?[1] The batch    file mode used by MODEM7 is unsuitable
  506. because    it does    not permit full    pathnames, file    length,    file date, or
  507. other attribute    information to be transmitted.    Such a restrictive design,
  508. hastily    implemented with only CP/M in mind, would not have permitted
  509. extensions to current areas of personal    computing such as Unix,    DOS, and
  510. object oriented    systems.  In addition, the MODEM7 batch    file mode is
  511. somewhat susceptible to    transmission impairments.
  512.  
  513.  
  514.  
  515. __________
  516.  
  517.  1. The    MODEM7 batch protocol transmitted CP/M FCB bytes f1...f8 and
  518.     t1...t3 one    character at a time.  The receiver echoed these    bytes as
  519.     received, one at a time.
  520.  
  521.  
  522.  
  523.  
  524. Chapter    4                      XMODEM Protocol Enhancements
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532. X/YMODEM Protocol Reference     09-11-86                 9
  533.  
  534.  
  535.  
  536. As in the case of single a file    transfer, the receiver initiates batch
  537. file transmission by sending a "C" character (for CRC-16).
  538.  
  539. The sender opens the first file    and sends packet number    0 with the
  540. following information.[2]
  541.  
  542. Only the pathname (file    name) part is required for batch transfers.
  543.  
  544. To maintain upwards compatibility, all unused bytes in packet 0    must be
  545. set to null.
  546.  
  547. Pathname The pathname (conventionally, the file    name) is sent as a null
  548.      terminated    ASCII string.  This is the filename format used    by the
  549.      handle oriented MSDOS(TM) functions and C library fopen functions.
  550.      An    assembly language example follows:
  551.                   DB      'foo.bar',0
  552.      No    spaces are included in the pathname.  Normally only the    file name
  553.      stem (no directory    prefix)    is transmitted unless the sender has
  554.      selected YAM's f option to    send the full pathname.     The source drive
  555.      (A:, B:, etc.) is never sent.
  556.  
  557.      Filename Considerations:
  558.  
  559.     + File names should be translated to lower case    unless the sending
  560.       system supports upper/lower case file    names.    This is    a
  561.       convenience for users    of systems (such as Unix) which    store
  562.       filenames in upper and lower case.
  563.  
  564.     + The receiver should accommodate file names in    lower and upper
  565.       case.
  566.  
  567.     + When transmitting files between different operating systems,
  568.       file names must be acceptable    to both    the sender and receiving
  569.       operating systems.
  570.  
  571.      If    directories are    included, they are delimited by    /; i.e.,
  572.      "subdir/foo" is acceptable, "subdir\foo" is not.
  573.  
  574. Length The file    length and each    of the succeeding fields are optional.[3]
  575.      The length    field is stored    in the packet as a decimal string counting
  576.      the number    of data    bytes in the file.  The    file length does not
  577.      include any CPMEOF    (^Z) or    other garbage characters used to pad the
  578.      last packet.
  579.  
  580.  
  581. __________
  582.  
  583.  2. Only the data part of the packet is    described here.
  584.  
  585.  3. Fields may not be skipped.
  586.  
  587.  
  588.  
  589.  
  590. Chapter    4                      XMODEM Protocol Enhancements
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598. X/YMODEM Protocol Reference     09-11-86                10
  599.  
  600.  
  601.  
  602.      If    the file being transmitted is growing during transmission, the
  603.      length field should be set    to at least the    final expected file
  604.      length, or    not sent.
  605.  
  606.      The receiver stores the specified number of characters, discarding
  607.      any padding added by the sender to    fill up    the last packet.
  608.  
  609. Modification Date The mod date is optional, and    the filename and length
  610.      may be sent without requiring the mod date    to be sent.
  611.  
  612.      Iff the modification date is sent,    a single space separates the
  613.      modification date from the    file length.
  614.  
  615.      The mod date is sent as an    octal number giving the    time the contents
  616.      of    the file were last changed, measured in    seconds    from Jan 1 1970
  617.      Universal Coordinated Time    (GMT).    A date of 0 implies the
  618.      modification date is unknown and should be    left as    the date the file
  619.      is    received.
  620.  
  621.      This standard format was chosen to    eliminate ambiguities arising from
  622.      transfers between different time zones.
  623.  
  624.      Two Microsoft blunders complicate the use of modification dates in
  625.      file transfers with MSDOS(TM) systems.  The first is the lack of
  626.      timezone standardization in MS-DOS.  A file's creation time can not
  627.      be    known unless the timezone of the system    that wrote the file[4] is
  628.      known.  Unix solved this problem (for planet Earth, anyway) by
  629.      stamping files with Universal Time    (GMT).    Microsoft would    have to
  630.      include the timezone of origin in the directory entries, but does
  631.      not.  Professional-YAM gets around    this problem by    using the z
  632.      parameter which is    set to the number of minutes local time    lags GMT.
  633.      For files known to    originate from a different timezone, the -zT
  634.      option may    be used    to specify T as    the timezone for an individual
  635.      file transfer.
  636.  
  637.      The second    problem    is the lack of a separate file creation    date in
  638.      DOS.  Since some backup schemes used with DOS rely    on the file
  639.      creation date to select files to be copied    to the archive,    back-
  640.      dating the    file modification date could interfere with the    safety of
  641.      the transferred files.  For this reason, Pro-YAM does not modify the
  642.      date of received files with the header information    unless the d
  643.      numeric parameter is non zero.
  644.  
  645.  
  646.  
  647.  
  648.  
  649. __________
  650.  
  651.  4. Not    necessarily that of the    transmitting system!
  652.  
  653.  
  654.  
  655.  
  656. Chapter    4                      XMODEM Protocol Enhancements
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664. X/YMODEM Protocol Reference     09-11-86                11
  665.  
  666.  
  667.  
  668. Mode Iff the file mode is sent,    a single space separates the file mode
  669.      from the modification date.  The file mode    is stored as an    octal
  670.      string.  Unless the file originated from a    Unix system, the file mode
  671.      is    set to 0.  rb(1) checks    the file mode for the 0x8000 bit which
  672.      indicates a Unix type regular file.  Files    with the 0x8000    bit set
  673.      are assumed to have been sent from    another    Unix (or similar) system
  674.      which uses    the same file conventions.  Such files are not translated
  675.      in    any way.
  676.  
  677.  
  678. Serial Number Iff the serial number is sent, a single space separates the
  679.      serial number from    the file mode.    The serial number of the
  680.      transmitting program is stored as an octal    string.     Programs which    do
  681.      not have a    serial number should omit this field, or set it    to 0.  The
  682.      receiver's    use of this field is optional.
  683.  
  684.  
  685. Other Fields YMODEM was    designed to allow additional header fields to be
  686.      added as above without creating compatibility problems with older
  687.      YMODEM programs.  Please contact Omen Technology if other fields are
  688.      needed for    special    application requirements.
  689.  
  690. The rest of the    packet is set to nulls.     This is essential to preserve
  691. upward compatibility.[5]
  692.  
  693. If the filename    packet is received with    a CRC or other error, a
  694. restrnsmission is requested.  After the    filename packet    has been received,
  695. it is ACK'ed if    the write open is successful.  If the file cannot be
  696. opened for writing, the    receiver cancels the transfer with CAN characters
  697. as described above.
  698.  
  699. The receiver then initiates transfer of    the file contents according to the
  700. standard XMODEM/CRC protocol.
  701.  
  702. After the file contents    have been transmitted, the receiver again asks for
  703. the next pathname.  Transmission of a null pathname terminates batch file
  704. transmission.  Note that transmission of no files is not necessarily an
  705. error.    This is    possible if none of the    files requested    of the sender
  706. could be opened    for reading.
  707.  
  708. In batch transmission, the receiver automatically requests CRC-16.
  709.  
  710. The Unix programs sz(1)    and rz(1) included in the source code file
  711.  
  712.  
  713. __________
  714.  
  715.  5. If,    perchance, this    information extends beyond 128 bytes (possible
  716.     with Unix 4.2 BSD extended file names), the    packet should be sent as a
  717.     1k packet as described above.
  718.  
  719.  
  720.  
  721.  
  722. Chapter    4                      XMODEM Protocol Enhancements
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730. X/YMODEM Protocol Reference     09-11-86                12
  731.  
  732.  
  733.  
  734. RZSZ[12].SHQ (rzsz1.sh,    rzsz2.sh) should answer    other questions    about
  735. YMODEM batch protocol.
  736.  
  737.       Figure 3.  YMODEM Batch Transmission Session
  738.  
  739.       SENDER                  RECEIVER
  740.                           "sb foo.*<CR>"
  741.       "sending in batch mode etc."
  742.                           C (command:rb)
  743.       SOH 00 FF foo.c NUL[123] CRC CRC
  744.                           ACK
  745.                           C
  746.       SOH 01 FE Data[128] CRC CRC
  747.                           ACK
  748.       STX 02 FD Data[1024] CRC CRC
  749.                           ACK
  750.       SOH 03 FC Data[128] CRC CRC
  751.                           ACK
  752.       SOH 04 FB Data[100] CPMEOF[28] CRC CRC
  753.                           ACK
  754.       EOT
  755.                           NAK
  756.       EOT
  757.                           ACK
  758.                           C
  759.       SOH 00 FF NUL[128] CRC CRC
  760.                           ACK
  761.  
  762.        Figure 4.  YMODEM Filename packet transmitted by    sz
  763.  
  764.        -rw-r--r--  6347    Jun 17 1984 20:34 bbcsched.txt
  765.  
  766.        00 0100FF62 62637363 6865642E 74787400    |...bbcsched.txt.|
  767.        10 36333437 20333331 34373432 35313320    |6347 3314742513 |
  768.        20 31303036 34340000 00000000 00000000    |100644..........|
  769.        30 00000000 00000000 00000000 00000000
  770.        80 000000CA 56
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788. Chapter    4                      XMODEM Protocol Enhancements
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796. X/YMODEM Protocol Reference     09-11-86                13
  797.  
  798.  
  799.  
  800.       Figure 5.     YMODEM    Header Information used    by various programs
  801.  
  802. _____________________________________________________________________
  803. | Program   | Batch | Length | Date | Mode | S/N | 1k-Blk | g-Option |
  804. |___________|_______|________|______|______|_____|________|__________|
  805. |Unix rz/sz | yes   | yes    | yes  | yes  | no     | yes      | sb only  |
  806. |___________|_______|________|______|______|_____|________|__________|
  807. |VMS rb/sb  | yes   | yes    | no   | no   | no     | yes      | no         |
  808. |___________|_______|________|______|______|_____|________|__________|
  809. |Pro-YAM    | yes   | yes    | yes  | no   | yes | yes      | yes         |
  810. |___________|_______|________|______|______|_____|________|__________|
  811. |CP/M YAM   | yes   | no     | no   | no   | no     | yes      | no         |
  812. |___________|_______|________|______|______|_____|________|__________|
  813. |KMD/IMP    | yes   | ?         | no   | no   | no     | yes      | no         |
  814. |___________|_______|________|______|______|_____|________|__________|
  815.  
  816. 4.1  KMD/IMP Exceptions    to YMODEM
  817.  
  818. KMD and    IMP character sequence emitted by the receiver (CK) to
  819. automatically trigger the use of 1024 byte packets as an alternative to
  820. specifying this    option on this command line.  Although this two    character
  821. sequence works well on single process micros in    direct communication,
  822. timesharing systems and    packet switched    networks can separate the
  823. successive characters by several seconds, rendering this method
  824. unreliable.
  825.  
  826. Sending    programs may detect the    CK sequence if the operating enviornment
  827. does not preclude reliable implementation.
  828.  
  829. Receiving programs should retain the option of sending the standard YMODEM
  830. C (not CK) trigger with    the standard 10    second timeout to insure
  831. compatibility with newer forms of telecommunications technology.
  832.  
  833.  
  834.  
  835. 5.  YMODEM-g File Transmission
  836.  
  837. Developing technology is providing phone line data transmission    at ever
  838. higher speeds using very specialized techniques.  These    high speed modems,
  839. as well    as session protocols such as X.PC, provide high    speed, error free
  840. communications at the expense of considerably increased    delay time.
  841.  
  842. This delay time    is moderate compared to    human interactions, but    it
  843. cripples the throughput    of most    error correcting protocols.
  844.  
  845. The g option to    YMODEM has proven effective under these    circumstances.
  846. The g option is    driven by the receiver,    which initiates    the batch transfer
  847. by transmitting    a G instead of C.  When    the sender recognizes the G, it
  848. bypasses the usual wait    for an ACK to each transmitted packet, sending
  849. succeeding packets at full speed, subject to XOFF/XON or other flow
  850. control    exerted    by the medium.
  851.  
  852.  
  853.  
  854. Chapter    5                      XMODEM Protocol Enhancements
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862. X/YMODEM Protocol Reference     09-11-86                14
  863.  
  864.  
  865.  
  866. The sender expects an inital G to initiate the transmission of a
  867. particular file, and also expects an ACK on the    EOT sent at the    end of
  868. each file.  This synchronization allows    the receiver time to open and
  869. close files as necessary.
  870.  
  871. If an error is detected    in a YMODEM-g transfer,    the receiver aborts the
  872. transfer with the multiple CAN abort sequence.    The ZMODEM protocol should
  873. be used    in applications    that require both streaming throughput and error
  874. recovery.
  875.  
  876.        Figure 6.  YMODEM-g Transmission    Session
  877.  
  878.        SENDER                     RECEIVER
  879.                          "sb foo.*<CR>"
  880.        "sending    in batch mode etc..."
  881.                          G (command:rb -g)
  882.        SOH 00 FF foo.c NUL[123]    CRC CRC
  883.                          G
  884.        SOH 01 FE Data[128] CRC CRC
  885.        STX 02 FD Data[1024] CRC    CRC
  886.        SOH 03 FC Data[128] CRC CRC
  887.        SOH 04 FB Data[100] CPMEOF[28] CRC CRC
  888.        EOT
  889.                          ACK
  890.                          G
  891.        SOH 00 FF NUL[128] CRC CRC
  892.  
  893.  
  894. 6.  XMODEM PROTOCOL OVERVIEW
  895.  
  896. 8/9/82 by Ward Christensen.
  897.  
  898. I will maintain    a master copy of this.    Please pass on changes or
  899. suggestions via    CBBS/Chicago at    (312) 545-8086,    CBBS/CPMUG (312) 849-1132
  900. or by voice at (312) 849-6279.
  901.  
  902. 6.1  Definitions
  903.  
  904.   <soh>    01H
  905.   <eot>    04H
  906.   <ack>    06H
  907.   <nak>    15H
  908.   <can>    18H
  909.   <C>    43H
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920. Chapter    6                      Xmodem Protocol Overview
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928. X/YMODEM Protocol Reference     09-11-86                15
  929.  
  930.  
  931.  
  932. 6.2  Transmission Medium Level Protocol
  933.  
  934. Asynchronous, 8    data bits, no parity, one stop bit.
  935.  
  936. The protocol imposes no    restrictions on    the contents of    the data being
  937. transmitted.  No control characters are    looked for in the 128-byte data
  938. messages.  Absolutely any kind of data may be sent - binary, ASCII, etc.
  939. The protocol has not formally been adopted to a    7-bit environment for the
  940. transmission of    ASCII-only (or unpacked-hex) data , although it    could be
  941. simply by having both ends agree to AND    the protocol-dependent data with
  942. 7F hex before validating it.  I    specifically am    referring to the checksum,
  943. and the    block numbers and their    ones- complement.
  944.  
  945. Those wishing to maintain compatibility    of the CP/M file structure, i.e.
  946. to allow modemming ASCII files to or from CP/M systems should follow this
  947. data format:
  948.  
  949.    + ASCII tabs    used (09H); tabs set every 8.
  950.  
  951.    + Lines terminated by CR/LF (0DH 0AH)
  952.  
  953.    + End-of-file indicated by ^Z, 1AH.    (one or    more)
  954.  
  955.    + Data is variable length, i.e. should be considered    a continuous
  956.      stream of data bytes, broken into 128-byte    chunks purely for the
  957.      purpose of    transmission.
  958.  
  959.    + A CP/M "peculiarity": If the data ends exactly on a 128-byte
  960.      boundary, i.e. CR in 127, and LF in 128, a    subsequent sector
  961.      containing    the ^Z EOF character(s)    is optional, but is preferred.
  962.      Some utilities or user programs still do not handle EOF without ^Zs.
  963.  
  964.    + The last block sent is no different from others, i.e.  there is no
  965.      "short block".
  966.           Figure 7.     XMODEM    Message    Block Level Protocol
  967.  
  968. Each block of the transfer looks like:
  969.       <SOH><blk    #><255-blk #><--128 data bytes--><cksum>
  970. in which:
  971. <SOH>          =    01 hex
  972. <blk #>          =    binary number, starts at 01 increments by 1, and
  973.         wraps 0FFH to 00H (not to 01)
  974. <255-blk #>   =    blk # after going thru 8080 "CMA" instr, i.e.
  975.         each bit complemented in the 8-bit block number.
  976.         Formally, this is the "ones complement".
  977. <cksum>          =    the sum    of the data bytes only.     Toss any carry.
  978.  
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.  
  986. Chapter    6                      Xmodem Protocol Overview
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994. X/YMODEM Protocol Reference     09-11-86                16
  995.  
  996.  
  997.  
  998. 6.3  File Level    Protocol
  999.  
  1000. 6.3.1  Common_to_Both_Sender_and_Receiver
  1001. All errors are retried 10 times.  For versions running with an operator
  1002. (i.e. NOT with XMODEM),    a message is typed after 10 errors asking the
  1003. operator whether to "retry or quit".
  1004.  
  1005. Some versions of the protocol use <can>, ASCII ^X, to cancel transmission.
  1006. This was never adopted as a standard, as having    a single "abort" character
  1007. makes the transmission susceptible to false termination    due to an <ack>
  1008. <nak> or <soh> being corrupted into a <can> and    aborting transmission.
  1009.  
  1010. The protocol may be considered "receiver driven", that is, the sender need
  1011. not automatically re-transmit, although    it does    in the current
  1012. implementations.
  1013.  
  1014.  
  1015. 6.3.2  Receive_Program_Considerations
  1016. The receiver has a 10-second timeout.  It sends    a <nak>    every time it
  1017. times out.  The    receiver's first timeout, which    sends a    <nak>, signals the
  1018. transmitter to start.  Optionally, the receiver    could send a <nak>
  1019. immediately, in    case the sender    was ready.  This would save the    initial    10
  1020. second timeout.     However, the receiver MUST continue to    timeout    every 10
  1021. seconds    in case    the sender wasn't ready.
  1022.  
  1023. Once into a receiving a    block, the receiver goes into a    one-second timeout
  1024. for each character and the checksum.  If the receiver wishes to    <nak> a
  1025. block for any reason (invalid header, timeout receiving    data), it must
  1026. wait for the line to clear.  See "programming tips" for    ideas
  1027.  
  1028. Synchronizing:    If a valid block number    is received, it    will be: 1) the
  1029. expected one, in which case everything is fine;    or 2) a    repeat of the
  1030. previously received block.  This should    be considered OK, and only
  1031. indicates that the receivers <ack> got glitched, and the sender    re-
  1032. transmitted; 3)    any other block    number indicates a fatal loss of
  1033. synchronization, such as the rare case of the sender getting a line-glitch
  1034. that looked like an <ack>.  Abort the transmission, sending a <can>
  1035.  
  1036.  
  1037. 6.3.3  Sending_program_considerations
  1038. While waiting for transmission to begin, the sender has    only a single very
  1039. long timeout, say one minute.  In the current protocol,    the sender has a
  1040. 10 second timeout before retrying.  I suggest NOT doing    this, and letting
  1041. the protocol be    completely receiver-driven.  This will be compatible with
  1042. existing programs.
  1043.  
  1044. When the sender    has no more data, it sends an <eot>, and awaits    an <ack>,
  1045. resending the <eot> if it doesn't get one.  Again, the protocol    could be
  1046. receiver-driven, with the sender only having the high-level 1-minute
  1047. timeout    to abort.
  1048.  
  1049.  
  1050.  
  1051.  
  1052. Chapter    6                      Xmodem Protocol Overview
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060. X/YMODEM Protocol Reference     09-11-86                17
  1061.  
  1062.  
  1063.  
  1064. Here is    a sample of the    data flow, sending a 3-block message.  It includes
  1065. the two    most common line hits -    a garbaged block, and an <ack> reply
  1066. getting    garbaged.  <xx>    represents the checksum    byte.
  1067.  
  1068.           Figure 8.     Data flow including Error Recovery
  1069.  
  1070. SENDER                    RECEIVER
  1071.                   times out    after 10 seconds,
  1072.                   <---        <nak>
  1073. <soh> 01 FE -data- <xx>          --->
  1074.                   <---        <ack>
  1075. <soh> 02 FD -data- xx          --->     (data gets line hit)
  1076.                   <---        <nak>
  1077. <soh> 02 FD -data- xx          --->
  1078.                   <---        <ack>
  1079. <soh> 03 FC -data- xx          --->
  1080. (ack gets garbaged)          <---        <ack>
  1081. <soh> 03 FC -data- xx          --->        <ack>
  1082. <eot>                  --->
  1083.                   <---     <anything except ack>
  1084. <eot>                  --->
  1085.                   <---        <ack>
  1086. (finished)
  1087.  
  1088. 6.4  Programming Tips
  1089.  
  1090.    + The character-receive subroutine should be    called with a parameter
  1091.      specifying    the number of seconds to wait.    The receiver should first
  1092.      call it with a time of 10,    then <nak> and try again, 10 times.
  1093.  
  1094.      After receiving the <soh>,    the receiver should call the character
  1095.      receive subroutine    with a 1-second    timeout, for the remainder of the
  1096.      message and the <cksum>.  Since they are sent as a    continuous stream,
  1097.      timing out    of this    implies    a serious like glitch that caused, say,
  1098.      127 characters to be seen instead of 128.
  1099.  
  1100.    + When the receiver wishes to <nak>,    it should call a "PURGE"
  1101.      subroutine, to wait for the line to clear.     Recall    the sender tosses
  1102.      any characters in its UART    buffer immediately upon    completing sending
  1103.      a block, to ensure    no glitches were mis- interpreted.
  1104.  
  1105.      The most common technique is for "PURGE" to call the character
  1106.      receive subroutine, specifying a 1-second timeout,[1] and looping
  1107.      back to PURGE until a timeout occurs.  The    <nak> is then sent,
  1108.      ensuring the other    end will see it.
  1109.  
  1110.  
  1111. __________
  1112.  
  1113.  1. These times    should be adjusted for use with    timesharing systems.
  1114.  
  1115.  
  1116.  
  1117.  
  1118. Chapter    6                      Xmodem Protocol Overview
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126. X/YMODEM Protocol Reference     09-11-86                18
  1127.  
  1128.  
  1129.  
  1130.    + You may wish to add code recommended by John Mahr to your character
  1131.      receive routine - to set an error flag if the UART    shows framing
  1132.      error, or overrun.     This will help    catch a    few more glitches - the
  1133.      most common of which is a hit in the high bits of the byte    in two
  1134.      consecutive bytes.     The <cksum> comes out OK since    counting in 1-byte
  1135.      produces the same result of adding    80H + 80H as with adding 00H +
  1136.      00H.
  1137.  
  1138.  
  1139.  
  1140. 7.  XMODEM/CRC Overview
  1141.  
  1142. 1/13/85    by John    Byrns -- CRC option.
  1143.  
  1144. Please pass on any reports of errors in    this document or suggestions for
  1145. improvement to me via Ward's/CBBS at (312) 849-1132, or    by voice at (312)
  1146. 885-1105.
  1147.  
  1148. The CRC    used in    the Modem Protocol is an alternate form    of block check
  1149. which provides more robust error detection than    the original checksum.
  1150. Andrew S. Tanenbaum says in his    book, Computer Networks, that the CRC-
  1151. CCITT used by the Modem    Protocol will detect all single    and double bit
  1152. errors,    all errors with    an odd number of bits, all burst errors    of length
  1153. 16 or less, 99.997% of 17-bit error bursts, and    99.998%    of 18-bit and
  1154. longer bursts.
  1155.  
  1156. The changes to the Modem Protocol to replace the checksum with the CRC are
  1157. straight forward. If that were all that    we did we would    not be able to
  1158. communicate between a program using the    old checksum protocol and one
  1159. using the new CRC protocol. An initial handshake was added to solve this
  1160. problem. The handshake allows a    receiving program with CRC capability to
  1161. determine whether the sending program supports the CRC option, and to
  1162. switch it to CRC mode if it does. This handshake is designed so    that it
  1163. will work properly with    programs which implement only the original
  1164. protocol. A description    of this    handshake is presented in section 10.
  1165.  
  1166.         Figure 9.  Message Block Level Protocol, CRC mode
  1167.  
  1168. Each block of the transfer in CRC mode looks like:
  1169.      <SOH><blk #><255-blk #><--128 data    bytes--><CRC hi><CRC lo>
  1170. in which:
  1171. <SOH>         = 01 hex
  1172. <blk #>         = binary number, starts at    01 increments by 1, and
  1173.            wraps 0FFH to 00H (not to 01)
  1174. <255-blk #>  = ones complement of blk #.
  1175. <CRC hi>     = byte containing the 8 hi    order coefficients of the CRC.
  1176. <CRC lo>     = byte containing the 8 lo    order coefficients of the CRC.
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.  
  1183.  
  1184. Chapter    7                      Xmodem Protocol Overview
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192. X/YMODEM Protocol Reference     09-11-86                19
  1193.  
  1194.  
  1195.  
  1196. 7.1  CRC Calculation
  1197.  
  1198. 7.1.1  Formal_Definition
  1199. To calculate the 16 bit    CRC the    message    bits are considered to be the
  1200. coefficients of    a polynomial. This message polynomial is first multiplied
  1201. by X^16    and then divided by the    generator polynomial (X^16 + X^12 + X^5    +
  1202. 1) using modulo    two arithmetic.    The remainder left after the division is
  1203. the desired CRC. Since a message block in the Modem Protocol is    128 bytes
  1204. or 1024    bits, the message polynomial will be of    order X^1023. The hi order
  1205. bit of the first byte of the message block is the coefficient of X^1023    in
  1206. the message polynomial.     The lo    order bit of the last byte of the message
  1207. block is the coefficient of X^0    in the message polynomial.
  1208.  
  1209.        Figure 10.  Example of CRC Calculation written in C
  1210. UPDCRC update routine from "rbsb.c".  Refer to the source code for these
  1211. programs (contained in RZSZ1.SHQ and RZSZ2.SHQ)    for usage.  A fast table
  1212. driven macro is    also included in this file.
  1213. /* update CRC */
  1214. unsigned short
  1215. updcrc(c, crc)
  1216. register c;
  1217. register unsigned crc;
  1218. {
  1219.     register count;
  1220.  
  1221.     for (count=8; --count>=0;) {
  1222.         if (crc    & 0x8000) {
  1223.             crc <<=    1;
  1224.             crc += (((c<<=1) & 0400)  !=  0);
  1225.             crc ^= 0x1021;
  1226.         }
  1227.         else {
  1228.             crc <<=    1;
  1229.             crc += (((c<<=1) & 0400)  !=  0);
  1230.         }
  1231.     }
  1232.     return crc;
  1233. }
  1234.  
  1235. 7.2  CRC File Level Protocol Changes
  1236.  
  1237. 7.2.1  Common_to_Both_Sender_and_Receiver
  1238. The only change    to the File Level Protocol for the CRC option is the
  1239. initial    handshake which    is used    to determine if    both the sending and the
  1240. receiving programs support the CRC mode. All Modem Programs should support
  1241. the checksum mode for compatibility with older versions.  A receiving
  1242. program    that wishes to receive in CRC mode implements the mode setting
  1243. handshake by sending a <C> in place of the initial <nak>.  If the sending
  1244. program    supports CRC mode it will recognize the    <C> and    will set itself
  1245. into CRC mode, and respond by sending the first    block as if a <nak> had
  1246. been received. If the sending program does not support CRC mode    it will
  1247.  
  1248.  
  1249.  
  1250. Chapter    7                      Xmodem Protocol Overview
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258. X/YMODEM Protocol Reference     09-11-86                20
  1259.  
  1260.  
  1261.  
  1262. not respond to the <C> at all. After the receiver has sent the <C> it will
  1263. wait up    to 3 seconds for the <soh> that    starts the first block.    If it
  1264. receives a <soh> within    3 seconds it will assume the sender supports CRC
  1265. mode and will proceed with the file exchange in    CRC mode. If no    <soh> is
  1266. received within    3 seconds the receiver will switch to checksum mode, send
  1267. a <nak>, and proceed in    checksum mode. If the receiver wishes to use
  1268. checksum mode it should    send an    initial    <nak> and the sending program
  1269. should respond to the <nak> as defined in the original Modem Protocol.
  1270. After the mode has been    set by the initial <C> or <nak>    the protocol
  1271. follows    the original Modem Protocol and    is identical whether the checksum
  1272. or CRC is being    used.
  1273.  
  1274.  
  1275. 7.2.2  Receive_Program_Considerations
  1276. There are at least 4 things that can go    wrong with the mode setting
  1277. handshake.
  1278.  
  1279.   1.  the initial <C> can be garbled or    lost.
  1280.  
  1281.   2.  the initial <soh>    can be garbled.
  1282.  
  1283.   3.  the initial <C> can be changed to    a <nak>.
  1284.  
  1285.   4.  the initial <nak>    from a receiver    which wants to receive in checksum
  1286.       can be changed to    a <C>.
  1287.  
  1288. The first problem can be solved    if the receiver    sends a    second <C> after
  1289. it times out the first time. This process can be repeated several times.
  1290. It must    not be repeated    too many times before sending a    <nak> and
  1291. switching to checksum mode or a    sending    program    without    CRC support may
  1292. time out and abort. Repeating the <C> will also    fix the    second problem if
  1293. the sending program cooperates by responding as    if a <nak> were    received
  1294. instead    of ignoring the    extra <C>.
  1295.  
  1296. It is possible to fix problems 3 and 4 but probably not    worth the trouble
  1297. since they will    occur very infrequently. They could be fixed by    switching
  1298. modes in either    the sending or the receiving program after a large number
  1299. of successive <nak>s. This solution would risk other problems however.
  1300.  
  1301.  
  1302. 7.2.3  Sending_Program_Considerations
  1303. The sending program should start in the    checksum mode. This will insure
  1304. compatibility with checksum only receiving programs. Anytime a <C> is
  1305. received before    the first <nak>    or <ack> the sending program should set
  1306. itself into CRC    mode and respond as if a <nak> were received. The sender
  1307. should respond to additional <C>s as if    they were <nak>s until the first
  1308. <ack> is received. This    will assist the    receiving program in determining
  1309. the correct mode when the <soh>    is lost    or garbled. After the first <ack>
  1310. is received the    sending    program    should ignore <C>s.
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316. Chapter    7                      Xmodem Protocol Overview
  1317.  
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324. X/YMODEM Protocol Reference     09-11-86                21
  1325.  
  1326.  
  1327.  
  1328. 7.3  Data Flow Examples    with CRC Option
  1329.  
  1330. Here is    a data flow example for    the case where the receiver requests
  1331. transmission in    the CRC    mode but the sender does not support the CRC
  1332. option.    This example also includes various transmission    errors.     <xx>
  1333. represents the checksum    byte.
  1334.  
  1335.       Figure 11.  Data Flow: Receiver has CRC Option, Sender Doesn't
  1336.  
  1337. SENDER                          RECEIVER
  1338.             <---            <C>
  1339.                 times out after    3 seconds,
  1340.             <---            <C>
  1341.                 times out after    3 seconds,
  1342.             <---            <C>
  1343.                 times out after    3 seconds,
  1344.             <---            <C>
  1345.                 times out after    3 seconds,
  1346.             <---            <nak>
  1347. <soh> 01 FE -data- <xx>    --->
  1348.             <---            <ack>
  1349. <soh> 02 FD -data- <xx>    --->        (data gets line hit)
  1350.             <---            <nak>
  1351. <soh> 02 FD -data- <xx>    --->
  1352.             <---            <ack>
  1353. <soh> 03 FC -data- <xx>    --->
  1354.    (ack    gets garbaged)    <---            <ack>
  1355.                 times out after    10 seconds,
  1356.             <---            <nak>
  1357. <soh> 03 FC -data- <xx>    --->
  1358.             <---            <ack>
  1359. <eot>            --->
  1360.             <---            <ack>
  1361.  
  1362. Here is    a data flow example for    the case where the receiver requests
  1363. transmission in    the CRC    mode and the sender supports the CRC option.  This
  1364. example    also includes various transmission errors.  <xxxx> represents the
  1365. 2 CRC bytes.
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382. Chapter    7                      Xmodem Protocol Overview
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390. X/YMODEM Protocol Reference     09-11-86                22
  1391.  
  1392.  
  1393.  
  1394.        Figure 12.  Receiver    and Sender Both    have CRC Option
  1395.  
  1396. SENDER                         RECEIVER
  1397.               <---               <C>
  1398. <soh> 01 FE -data- <xxxx> --->
  1399.               <---               <ack>
  1400. <soh> 02 FD -data- <xxxx> --->           (data gets line hit)
  1401.               <---               <nak>
  1402. <soh> 02 FD -data- <xxxx> --->
  1403.               <---               <ack>
  1404. <soh> 03 FC -data- <xxxx> --->
  1405. (ack gets garbaged)      <---               <ack>
  1406.                      times out after 10    seconds,
  1407.               <---               <nak>
  1408. <soh> 03 FC -data- <xxxx> --->
  1409.               <---               <ack>
  1410. <eot>              --->
  1411.               <---               <ack>
  1412.  
  1413.  
  1414. 8.  MORE INFORMATION
  1415.  
  1416. More information may be    obtained by calling Telegodzilla at 503-621-3746.
  1417. Hit RETURNs for    baud rate detection.Speed detection is automatic for 300,
  1418. 1200, and 2400 bps.
  1419.  
  1420. A version this file with boldface, underlining,    and superscripts for
  1421. printing on Epson or Gemini printers is    available on Telegodzilla as
  1422. "YMODEME.DOC" or "YMODEME.DQC".
  1423.  
  1424. UUCP sites can obtain this file    with
  1425.          uucp omen!/usr/spool/uucppublic/ymodem.doc    /tmp
  1426. A continually updated list of available    files is stored    in
  1427. /usr/spool/uucppublic/FILES.
  1428.  
  1429. The following L.sys line calls Telegodzilla (Pro-YAM in    host operation).
  1430. Telegodzilla waits for carriage    returns    to determine the incoming speed.
  1431. If none    is detected, 1200 bps is assumed and a greeting    is displayed.
  1432.  
  1433. In response to "Name Please:" uucico gives the Pro-YAM "link" command as a
  1434. user name.  The    password (Giznoid) controls access to the Xenix    system
  1435. connected to the IBM PC's other    serial port.  Communications between
  1436. Pro-YAM    and Xenix use 9600 bps;    YAM converts this to the caller's speed.
  1437.  
  1438. Finally, the calling uucico logs in as uucp.
  1439.  
  1440. omen Any ACU 1200 1-503-621-3746 se:--se: link ord: Giznoid in:--in: uucp
  1441.  
  1442. Contact    omen!caf if you    wish the troff source files.
  1443.  
  1444.  
  1445.  
  1446.  
  1447.  
  1448. Chapter    8                      Xmodem Protocol Overview
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456. X/YMODEM Protocol Reference     09-11-86                23
  1457.  
  1458.  
  1459.  
  1460. 9.  Document Revisions
  1461.  
  1462. The September 11 1986 edition clarifies    nomenclature and some minor
  1463. points.     The April 15 1986 edition clarifies some points concerning CRC
  1464. calculations and spaces    in the header.
  1465.  
  1466.  
  1467. 10.  YMODEM Programs
  1468.  
  1469. A demonstration    version    of Professional-YAM is available as ZMODEM.ARC
  1470. This may be used to test YMODEM    amd ZMODEM implementations.
  1471.  
  1472. Unix programs supporting the YMODEM protocol are available on Telegodzilla
  1473. as RZSZ1.SHQ and RZSZ2.SHQ (SQueezed shell archives).  Most Unix like
  1474. systems    are supported, including V7, Xenix, Sys    III, 4.2 BSD, SYS V,
  1475. Idris, Coherent, and Regulus.
  1476.  
  1477. A version for VAX-VMS is available in VRBSB.SHQ.
  1478.  
  1479. Irv Hoff has added YMODEM 1k packets and basic YMODEM batch transfers to
  1480. the KMD    and IMP    series programs, which replace the XMODEM and
  1481. MODEM7/MDM7xx series respectively.  Overlays are available for a wide
  1482. variety    of CP/M    systems.
  1483.  
  1484. Questions about    YMODEM,    the Professional-YAM communications program, and
  1485. requests for evaluation    copies may be directed to:
  1486.      Chuck Forsberg
  1487.      Omen Technology Inc
  1488.      17505-V Sauvie Island Road
  1489.      Portland Oregon 97231
  1490.      Voice: 503-621-3406
  1491.      Modem: 503-621-3746 Speed:    2400,1200,300
  1492.      Usenet: ...!tektronix!reed!omen!caf
  1493.      Compuserve: 70007,2304
  1494.      Source: TCE022
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.  
  1503.  
  1504.  
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514. Chapter    10                      Xmodem Protocol Overview
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.  
  1523.  
  1524.  
  1525.  
  1526.                  CONTENTS
  1527.  
  1528.  
  1529.  1.  ROSETTA STONE....................................................     2
  1530.  
  1531.  2.  YET ANOTHER PROTOCOL?............................................     2
  1532.      2.1  Some Messages    from the Pioneer..............................     4
  1533.  
  1534.  3.  XMODEM PROTOCOL ENHANCEMENTS.....................................     5
  1535.      3.1  Graceful Abort..............................................     6
  1536.      3.2  CRC-16 Option...............................................     6
  1537.      3.3  XMODEM-1k 1024 Byte Packet..................................     7
  1538.  
  1539.  4.  YMODEM Batch File Transmission...................................     7
  1540.      4.1  KMD/IMP Exceptions to    YMODEM................................    13
  1541.  
  1542.  5.  YMODEM-g File Transmission.......................................    13
  1543.  
  1544.  6.  XMODEM PROTOCOL OVERVIEW.........................................    14
  1545.      6.1  Definitions.................................................    14
  1546.      6.2  Transmission Medium Level Protocol..........................    15
  1547.      6.3  File Level Protocol.........................................    16
  1548.      6.4  Programming Tips............................................    17
  1549.  
  1550.  7.  XMODEM/CRC    Overview..............................................    18
  1551.      7.1  CRC Calculation.............................................    19
  1552.      7.2  CRC File Level Protocol Changes.............................    19
  1553.      7.3  Data Flow Examples with CRC Option..........................    21
  1554.  
  1555.  8.  MORE INFORMATION.................................................    22
  1556.  
  1557.  9.  Document Revisions...............................................    23
  1558.  
  1559. 10.  YMODEM Programs..................................................    23
  1560.  
  1561.  
  1562.  
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570.  
  1571.  
  1572.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.  
  1578.  
  1579.  
  1580.                   - i -
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588.  
  1589.  
  1590.  
  1591.  
  1592.  
  1593.  
  1594.  
  1595.                  LIST OF FIGURES
  1596.  
  1597.  
  1598.  Figure    1.  1024 byte Packets.........................................     7
  1599.  
  1600.  Figure    2.  Mixed 1024 and 128 byte Packets...........................     7
  1601.  
  1602.  Figure    3.  YMODEM Batch Transmission Session.........................    12
  1603.  
  1604.  Figure    4.  YMODEM Filename packet transmitted by sz..................    12
  1605.  
  1606.  Figure    5.  YMODEM Header Information used by various programs........    13
  1607.  
  1608.  Figure    6.  YMODEM-g Transmission Session.............................    14
  1609.  
  1610.  Figure    7.  XMODEM Message Block Level Protocol.......................    15
  1611.  
  1612.  Figure    8.  Data flow including    Error Recovery........................    17
  1613.  
  1614.  Figure    9.  Message Block Level    Protocol, CRC mode....................    18
  1615.  
  1616. Figure 10.  Example of CRC Calculation written in C...................    19
  1617.  
  1618. Figure 11.  Data Flow: Receiver    has CRC    Option,    Sender Doesn't........    21
  1619.  
  1620. Figure 12.  Receiver and Sender    Both have CRC Option..................    22
  1621.  
  1622.  
  1623.  
  1624.  
  1625.  
  1626.  
  1627.  
  1628.  
  1629.  
  1630.  
  1631.  
  1632.  
  1633.  
  1634.  
  1635.  
  1636.  
  1637.  
  1638.  
  1639.  
  1640.  
  1641.  
  1642.  
  1643.  
  1644.  
  1645.  
  1646.                   - ii -
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654. RZ(1)               UNIX Programmer's Manual                RZ(1)
  1655.  
  1656.  
  1657.  
  1658. NAME
  1659.      rx, rb, rz - XMODEM, YMODEM, ZMODEM (Batch) file receive
  1660.  
  1661. SYNOPSIS
  1662.      rz [- +1abepqtuvy]
  1663.      rb [- +1abqtuvy]
  1664.      rx [- 1abceqtuv] file
  1665.      gz file ...
  1666.      [-][v]rzCOMMAND
  1667.  
  1668. DESCRIPTION
  1669.      This program uses error correcting protocols to receive
  1670.      files over a dial-in serial port from a variety of programs
  1671.      running under PC-DOS, CP/M, Unix, and other operating sys-
  1672.      tems.  It is invoked from a shell prompt manually, or
  1673.      automatically as a result of an "sz file ..." command given
  1674.      to the calling program.
  1675.  
  1676.      While rz is smart enough to be called from cu(1), very few
  1677.      versions of cu(1) are smart enough to allow rz to work prop-
  1678.      erly.  Unix flavors of Professional-YAM are available for
  1679.      such dial-out application.
  1680.  
  1681.  
  1682.      Rz (Receive ZMODEM) receives files with the ZMODEM batch
  1683.      protocol.  Pathnames are supplied by the sending program,
  1684.      and directories are made if necessary (and possible).  Nor-
  1685.      mally, the "rz" command is automatically issued by the cal-
  1686.      ling ZMODEM program, but some defective ZMODEM implementa-
  1687.      tions may require starting rz the old fashioned way.
  1688.  
  1689.  
  1690.      Rb receives file(s) with YMODEM, accepting either standard
  1691.      128 byte sectors or 1024 byte sectors (YAM sb -k option).
  1692.      The user should determine when the 1024 byte block length
  1693.      actually improves throughput without causing lost data or
  1694.      even system crashes.
  1695.  
  1696.      If True YMODEM (Omen Technology trademark) file information
  1697.      (file length, etc.) is received, the file length controls
  1698.      the number of bytes written to the output dataset, and the
  1699.      modify time and file mode (iff non zero) are set accord-
  1700.      ingly.
  1701.  
  1702.      If no True YMODEM file information is received, slashes in
  1703.      the pathname are changed to underscore, and any trailing
  1704.      period in the pathname is eliminated.  This conversion is
  1705.      useful for files received from CP/M systems.  With YMODEM,
  1706.      each file name is converted to lower case unless it contains
  1707.      one or more lower case letters.
  1708.  
  1709.  
  1710.  
  1711.  
  1712.  
  1713. Printed 3/29/88               OMEN                              1
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720. RZ(1)               UNIX Programmer's Manual                RZ(1)
  1721.  
  1722.  
  1723.  
  1724.      Rx receives a single file with XMODEM or XMODEM-1k protocol.
  1725.      The user should determine when the 1024 byte block length
  1726.      actually improves throughput without causing problems.  The
  1727.      user must supply the file name to both sending and receiving
  1728.      programs.  Up to 1023 garbage characters may be added to the
  1729.      received file.
  1730.  
  1731.      Gz is a shell script which calls sz to command Pro-YAM or
  1732.      ZCOMM to transmit the specified files.  Pathnames used with
  1733.      gz must be escaped if they have special significance to the
  1734.      Unix shell.
  1735.      EXAMPLE: gz "-a C:*.c D:*.h"
  1736.  
  1737.  
  1738.      Rz may be invoked as rzCOMMAND (with an optional leading -
  1739.      as generated by login(1)).  For each received file, rz will
  1740.      pipe the file to ``COMMAND filename'' where filename is the
  1741.      name of the transmitted file with the file contents as stan-
  1742.      dard input.
  1743.  
  1744.      Each file transfer is acknowledged when COMMAND exits with 0
  1745.      status.  A non zero exit status terminates transfers.
  1746.  
  1747.      A typical use for this form is rzrmail which calls rmail(1)
  1748.      to post mail to the user specified by the transmitted file
  1749.      name.  For example, sending the file "caf" from a PC-DOS
  1750.      system to rzrmail on a Unix system would result in the con-
  1751.      tents of the DOS file "caf" being mailed to user "caf".
  1752.  
  1753.      On some Unix systems, the login directory must contain a
  1754.      link to COMMAND as login sets SHELL=rsh which disallows
  1755.      absolute pathnames.  If invoked with a leading ``v'', rz
  1756.      will report progress to /tmp/rzlog.  The following entry
  1757.      works for Unix SYS III/V:
  1758.                 rzrmail::5:1::/bin:/usr/local/rzrmail
  1759.      If the SHELL environment variable includes rsh or rksh (res-
  1760.      tricted shell), rz will not accept absolute pathnames or
  1761.      references to a parent directory, will not modify an exist-
  1762.      ing file, and removes any files received in error.
  1763.  
  1764.      If rz is invoked with stdout and stderr to different
  1765.      datasets, Verbose is set to 2, causing frame by frame pro-
  1766.      gress reports to stderr.  This may be disabled with the q
  1767.      option.
  1768.  
  1769.  
  1770.      The meanings of the available options are:
  1771.  
  1772.      1    Use file descriptor 1 for ioctls and reads (Unix only).
  1773.           By default, file descriptor 0 is used for ioctls and
  1774.           reads.  This option allows rz to be used with the
  1775.           Professional-YAM $ command and some versions of ncu(1),
  1776.  
  1777.  
  1778.  
  1779. Printed 3/29/88               OMEN                              2
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786. RZ(1)               UNIX Programmer's Manual                RZ(1)
  1787.  
  1788.  
  1789.  
  1790.           but not cu(1).
  1791.      a    Convert files to Unix conventions by stripping carriage
  1792.           returns and all characters beginning with the first
  1793.           Control Z (CP/M end of file).
  1794.      b    Binary (tell it like it is) file transfer override.
  1795.      c    Request 16 bit CRC.  XMODEM file transfers default to 8
  1796.           bit checksum.  YMODEM and ZMODEM normally use 16 bit
  1797.           CRC.
  1798.      D    Output file data to /dev/null; for testing.
  1799.      e    Force sender to escape all control characters; normally
  1800.           XON, XOFF, DLE, CR-@-CR, and Ctrl-X are escaped.
  1801.      p    (ZMODEM) Protect: skip file if destination file exists.
  1802.      q    Quiet suppresses verbosity.
  1803.      t tim
  1804.           Change timeout to tim tenths of seconds.
  1805.      v    Verbose causes a list of file names to be appended to
  1806.           /tmp/rzlog .  More v's generate more output.
  1807.      y    Yes, clobber any existing files with the same name.
  1808.  
  1809. EXAMPLES
  1810.      (Pro-YAM command)
  1811.      <ALT-2>
  1812.      Pro-YAM Command: sz *.h *.c
  1813.      (This automatically invokes rz on the connected system.)
  1814.  
  1815. SEE ALSO
  1816.      ZMODEM.DOC, YMODEM.DOC, IMP(CP/M), Professional-YAM,
  1817.      sz(omen), usq(omen), undos(omen)
  1818.  
  1819.      Compile time options required for various operating systems
  1820.      are described in the source file.
  1821.  
  1822. NOTES
  1823.      Sending serial data to timesharing minicomputers at sus-
  1824.      tained high speeds has been known to cause lockups, system
  1825.      halts, kernel panics, and occasional antisocial behaviour.
  1826.      When experimenting with high speed input to a system, con-
  1827.      sider rebooting the system if the file transfers are not
  1828.      successful, especially if the personality of the system
  1829.      appears altered.
  1830.  
  1831.      The Unix "ulimit" parameter must be set high enough to per-
  1832.      mit large file transfers.
  1833.  
  1834.      The TTY input buffering on some systems may not allow long
  1835.      blocks or streaming input at high speed.  You should suspect
  1836.      this problem when you can't send data to the Unix system at
  1837.      high speeds using ZMODEM, YMODEM-1k or XMODEM-1k, when YMO-
  1838.      DEM with 128 byte blocks works properly.  If the system's
  1839.      tty line handling is really broken, the serial port or the
  1840.      entire system may not survive the onslaught of long bursts
  1841.      of high speed data.
  1842.  
  1843.  
  1844.  
  1845. Printed 3/29/88               OMEN                              3
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852. RZ(1)               UNIX Programmer's Manual                RZ(1)
  1853.  
  1854.  
  1855.  
  1856.      The DSZ or Pro-YAM zmodem l numeric parameter may be set to
  1857.      a value between 64 and 1024 to limit the burst length ("zmo-
  1858.      dem pl128").
  1859.  
  1860.      32 bit CRC code courtesy Gary S. Brown.  Directory creation
  1861.      code from John Gilmore's PD TAR program.
  1862.  
  1863. BUGS
  1864.      Calling rz from most versions of cu(1) doesn't work because
  1865.      cu's receive process fights rz for characters from the
  1866.      modem.
  1867.  
  1868.      Programs that do not properly implement the specified file
  1869.      transfer protocol may cause sz to "hang" the port for a
  1870.      minute or two.  Every reported instance of this problem has
  1871.      been corrected by using ZCOMM, Pro-YAM, or other program
  1872.      with a correct implementation of the specified protocol.
  1873.  
  1874.      Many programs claiming to support YMODEM only support XMODEM
  1875.      with 1k blocks, and they often don't get that quite right.
  1876.  
  1877.      Pathnames are restricted to 127 characters.  In XMODEM sin-
  1878.      gle file mode, the pathname given on the command line is
  1879.      still processed as described above.  The ASCII option's
  1880.      CR/LF to NL translation merely deletes CR's; undos(omen)
  1881.      performs a more intelligent translation.
  1882.  
  1883. VMS VERSION
  1884.      Some of the #includes with file names enclosed with angle
  1885.      brackets <> may need to have the angle brackets changed to
  1886.      "", or vice versa.
  1887.  
  1888.      The VMS version does not set binary mode according to the
  1889.      incoming file type.  Non binary file processing consists of
  1890.      stripping all characters beginning with CPMEOF (^Z).
  1891.  
  1892.      The VMS version does not set the file time.
  1893.  
  1894.      At high speeds, VMS sometimes loses incoming characters,
  1895.      resulting in retries and degradation of throughput.
  1896.  
  1897.      The mysterious VMS C Standard I/O Package and RMS may
  1898.      interact to modify file contents unexpectedly.
  1899.  
  1900.      The VMS version does not support invocation as rzCOMMAND .
  1901.      ZMODEM has not yet been implemented on the VMS version.
  1902.  
  1903. ZMODEM CAPABILITIES
  1904.      Rz supports incoming ZMODEM binary (-b), ASCII (-a), protect
  1905.      (-p), and append (-+) requests, and ZMODEM command execu-
  1906.      tion.
  1907.  
  1908.  
  1909.  
  1910.  
  1911. Printed 3/29/88               OMEN                              4
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918. RZ(1)               UNIX Programmer's Manual                RZ(1)
  1919.  
  1920.  
  1921.  
  1922. FILES
  1923.      rz.c, rbsb.c, zm.c, zmodem.h source files.
  1924.  
  1925.      /tmp/rzlog stores debugging output generated with -vv
  1926.      option.
  1927.  
  1928.  
  1929.  
  1930.  
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941.  
  1942.  
  1943.  
  1944.  
  1945.  
  1946.  
  1947.  
  1948.  
  1949.  
  1950.  
  1951.  
  1952.  
  1953.  
  1954.  
  1955.  
  1956.  
  1957.  
  1958.  
  1959.  
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977. Printed 3/29/88               OMEN                              5
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983.  
  1984. SZ(1)               UNIX Programmer's Manual                SZ(1)
  1985.  
  1986.  
  1987.  
  1988. NAME
  1989.      sx, sb, sz - XMODEM, YMODEM, ZMODEM file send
  1990.  
  1991. SYNOPSIS
  1992.      sz [-+1abdefkLlNnopqTtuvyY] file ...
  1993.      sb [-1adfkqtuv] file ...
  1994.      sx [-1akqtuv] file
  1995.      sz [-1oqtv] -c COMMAND
  1996.      sz [-1oqtv] -i COMMAND
  1997.      sz -TT
  1998.  
  1999. DESCRIPTION
  2000.      Sz uses the ZMODEM, YMODEM or XMODEM error correcting proto-
  2001.      col to send one or more files over a dial-in serial port to
  2002.      a variety of programs running under PC-DOS, CP/M, Unix, VMS,
  2003.      and other operating systems.
  2004.  
  2005.      While rz is smart enough to be called from cu(1), very few
  2006.      versions of cu(1) are smart enough to allow sz to work prop-
  2007.      erly.  Unix flavors of Professional-YAM are available for
  2008.      such dial-out application.
  2009.  
  2010.  
  2011.      Sz sends one or more files with ZMODEM protocol.
  2012.  
  2013.      ZMODEM greatly simplifies file transfers compared to XMODEM.
  2014.      In addition to a friendly user interface, ZMODEM provides
  2015.      Personal Computer and other users an efficient, accurate,
  2016.      and robust file transfer method.
  2017.  
  2018.      ZMODEM provides complete END-TO-END data integrity between
  2019.      application programs.  ZMODEM's 32 bit CRC catches errors
  2020.      that sneak into even the most advanced networks.
  2021.  
  2022.      Advanced file management features include AutoDownload
  2023.      (Automatic file Download initiated without user interven-
  2024.      tion), Display of individual and total file lengths and
  2025.      transmission time estimates, Crash Recovery, selective file
  2026.      transfers, and preservation of exact file date and length.
  2027.  
  2028.      Output from another program may be piped to sz for transmis-
  2029.      sion by denoting standard input with "-":
  2030.                              ls -l | sz -
  2031.      The program output is transmitted with the filename sPID.sz
  2032.      where PID is the process ID of the sz program.  If the
  2033.      environment variable ONAME is set, that is used instead.  In
  2034.      this case, the Unix command:
  2035.                       ls -l | ONAME=con sz -ay -
  2036.      will send a "file" to the PC-DOS console display.  The -y
  2037.      option instructs the receiver to open the file for writing
  2038.      unconditionally.  The -a option causes the receiver to con-
  2039.      vert Unix newlines to PC-DOS carriage returns and linefeeds.
  2040.  
  2041.  
  2042.  
  2043. Printed 3/29/88               OMEN                              1
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049.  
  2050. SZ(1)               UNIX Programmer's Manual                SZ(1)
  2051.  
  2052.  
  2053.  
  2054.      Sb batch sends one or more files with YMODEM or ZMODEM pro-
  2055.      tocol.  The initial ZMODEM initialization is not sent.  When
  2056.      requested by the receiver, sb supports YMODEM-g with
  2057.      "cbreak" tty mode, XON/XOFF flow control, and interrupt
  2058.      character set to CAN (^X).  YMODEM-g (Professional-YAM g
  2059.      option) increases throughput over error free channels
  2060.      (direct connection, X.PC, etc.) by not acknowledging each
  2061.      transmitted sector.
  2062.  
  2063.      On Unix systems, additional information about the file is
  2064.      transmitted.  If the receiving program uses this informa-
  2065.      tion, the transmitted file length controls the exact number
  2066.      of bytes written to the output dataset, and the modify time
  2067.      and file mode are set accordingly.
  2068.  
  2069.  
  2070.      Sx sends a single file with XMODEM or XMODEM-1k protocol
  2071.      (sometimes incorrectly called "ymodem").  The user must sup-
  2072.      ply the file name to both sending and receiving programs.
  2073.  
  2074.      Iff sz is invoked with $SHELL set and iff that variable con-
  2075.      tains the string rsh or rksh (restricted shell), sz operates
  2076.      in restricted mode.  Restricted mode restricts pathnames to
  2077.      the current directory and PUBDIR (usually
  2078.      /usr/spool/uucppublic) and/or subdirectories thereof.
  2079.  
  2080.  
  2081.      The fourth form sends a single COMMAND to a ZMODEM receiver
  2082.      for execution.  Sz exits with the COMMAND return value.  If
  2083.      COMMAND includes spaces or characters special to the shell,
  2084.      it must be quoted.
  2085.  
  2086.  
  2087.      The fifth form sends a single COMMAND to a ZMODEM receiver
  2088.      for execution.  Sz exits as soon as the receiver has
  2089.      correctly received the command, before it is executed.
  2090.  
  2091.  
  2092.      The sixth form (sz -TT) attempts to output all 256 code com-
  2093.      binations to the terminal.  In you are having difficulty
  2094.      sending files, this command lets you see which character
  2095.      codes are being eaten by the operating system.
  2096.  
  2097.  
  2098.      If sz is invoked with stdout and stderr to different
  2099.      datasets, Verbose is set to 2, causing frame by frame pro-
  2100.      gress reports to stderr.  This may be disabled with the q
  2101.      option.
  2102.  
  2103.      The meanings of the available options are:
  2104.  
  2105.  
  2106.  
  2107.  
  2108.  
  2109. Printed 3/29/88               OMEN                              2
  2110.  
  2111.  
  2112.  
  2113.  
  2114.  
  2115.  
  2116. SZ(1)               UNIX Programmer's Manual                SZ(1)
  2117.  
  2118.  
  2119.  
  2120.      +    Instruct the receiver to append transmitted data to an
  2121.           existing file (ZMODEM only).
  2122.      1    Use file descriptor 1 for ioctls and reads.  By
  2123.           default, file descriptor 0 is used.  This option allows
  2124.           sz to be used with the Professional-YAM $ command.
  2125.           This also works with some versions of ncu(1), but not
  2126.           cu(1).
  2127.      a    Convert NL characters in the transmitted file to CR/LF.
  2128.           This is done by the sender for XMODEM and YMODEM, by
  2129.           the receiver for ZMODEM.
  2130.      b    (ZMODEM) Binary override: transfer file without any
  2131.           translation.
  2132.      c COMMAND
  2133.           Send COMMAND to the receiver for execution, return with
  2134.           COMMAND's exit status.
  2135.      d    Change all instances of "." to "/" in the transmitted
  2136.           pathname.  Thus, C.omenB0000 (which is unacceptable to
  2137.           MSDOS or CP/M) is transmitted as C/omenB0000.  If the
  2138.           resultant filename has more than 8 characters in the
  2139.           stem, a "." is inserted to allow a total of eleven.
  2140.      e    Escape all control characters; normally XON, XOFF, DLE,
  2141.           CR-@-CR, and Ctrl-X are escaped.
  2142.      f    Send Full pathname.  Normally directory prefixes are
  2143.           stripped from the transmitted filename.
  2144.      i COMMAND
  2145.           Send COMMAND to the receiver for execution, return
  2146.           Immediately upon the receiving program's successful
  2147.           recption of the command.
  2148.      k    (XMODEM/YMODEM) Send files using 1024 byte blocks
  2149.           rather than the default 128 byte blocks.  1024 byte
  2150.           packets speed file transfers at high bit rates.  (ZMO-
  2151.           DEM streams the data for the best possible throughput.)
  2152.      L N  Use ZMODEM sub-packets of length N.  A larger N (32 <=
  2153.           N <= 1024) gives slightly higher throughput, a smaller
  2154.           N speeds error recovery.  The default is 128 below 300
  2155.           baud, 256 above 300 baud, or 1024 above 2400 baud.
  2156.      l N  Wait for the receiver to acknowledge correct data every
  2157.           N (32 <= N <= 1024) characters.  This may be used to
  2158.           avoid network overrun when XOFF flow control is lack-
  2159.           ing.
  2160.      n    (ZMODEM) Send each file if destination file does not
  2161.           exist.  Overwrite destination file if source file is
  2162.           newer than the destination file.
  2163.      N    (ZMODEM) Send each file if destination file does not
  2164.           exist.  Overwrite destination file if source file is
  2165.           newer or longer than the destination file.
  2166.      o    (ZMODEM) Disable automatic selection of 32 bit CRC.
  2167.      p    (ZMODEM) Protect existing destination files by skipping
  2168.           transfer if the destination file exists.
  2169.      q    Quiet suppresses verbosity.
  2170.      r    (ZMODEM) Resume interrupted file transfer.  If the
  2171.           source file is longer than the destination file, the
  2172.  
  2173.  
  2174.  
  2175. Printed 3/29/88               OMEN                              3
  2176.  
  2177.  
  2178.  
  2179.  
  2180.  
  2181.  
  2182. SZ(1)               UNIX Programmer's Manual                SZ(1)
  2183.  
  2184.  
  2185.  
  2186.           transfer commences at the offset in the source file
  2187.           that equals the length of the destination file.
  2188.      t tim
  2189.           Change timeout to tim tenths of seconds.
  2190.      u    Unlink the file after successful transmission.
  2191.      w N  Limit the transmit window size to N bytes (ZMODEM).
  2192.      v    Verbose causes a list of file names to be appended to
  2193.           /tmp/szlog .  More v's generate more output.
  2194.      y    Instruct a ZMODEM receiving program to overwrite any
  2195.           existing file with the same name.
  2196.      Y    Instruct a ZMODEM receiving program to overwrite any
  2197.           existing file with the same name, and to skip any
  2198.           source files that do have a file with the same pathname
  2199.           on the destination system.
  2200.  
  2201. EXAMPLES
  2202.      ZMODEM File Transfer
  2203.      $ sz -a *.c
  2204.      This single command transfers all .c files in the current
  2205.      Unix directory with conversion (-a) to end of line conven-
  2206.      tions appropriate to the receiving environment.  With ZMODEM
  2207.      AutoDownload enabled, Professional-YAM  and ZCOMM will
  2208.      automatically recieve the files after performing a security
  2209.      check.
  2210.  
  2211.      $ sz -Yan *.c *.h
  2212.      Send only the .c and .h files that exist on both systems,
  2213.      and are newer on the sending system than the corresponding
  2214.      version on the receiving system, converting Unix to DOS text
  2215.      format.
  2216.  
  2217.      ZMODEM Command Download
  2218.       cpszall:all
  2219.          sz -c "c:;cd /yam/dist"
  2220.          sz -ya $(YD)/*.me
  2221.          sz -yqb y*.exe
  2222.          sz -c "cd /yam"
  2223.          sz -i "!insms"
  2224.      This Makefile fragment uses sz to issue commands to
  2225.      Professional-YAM to change current disk and directory.
  2226.      Next, sz transfers the .me files from the $YD directory,
  2227.      commanding the receiver to overwrite the old files and to
  2228.      convert from Unix end of line conventions to PC-DOS conven-
  2229.      tions.  The third line transfers some .exe files.  The
  2230.      fourth and fifth lines command Pro-YAM to change directory
  2231.      and execute a PC-DOS batch file insms . Since the batch file
  2232.      takes considerable time, the -i form is used to allow sz to
  2233.      exit immediately.
  2234.  
  2235.      XMODEM File Transfer (To Crosstalk)
  2236.      $ sx -a foo.c
  2237.      ESC
  2238.  
  2239.  
  2240.  
  2241. Printed 3/29/88               OMEN                              4
  2242.  
  2243.  
  2244.  
  2245.  
  2246.  
  2247.  
  2248. SZ(1)               UNIX Programmer's Manual                SZ(1)
  2249.  
  2250.  
  2251.  
  2252.      rx foo.c
  2253.      The above three commands transfer a single file from Unix to
  2254.      a PC and Crosstalk with sz translating Unix newlines to DOS
  2255.      CR/LF.  This combination is much slower than ZMODEM.
  2256.  
  2257. ERROR MESSAGES
  2258.      "Caught signal 99" indicates the program was not properly
  2259.      compiled, refer to "bibi(99)" in rbsb.c for details.
  2260.  
  2261. SEE ALSO
  2262.      rz(omen), ZMODEM.DOC, YMODEM.DOC, Professional-YAM,
  2263.      IMP(CP/M), sq(omen), todos(omen), tocpm(omen), tomac(omen),
  2264.      yam(omen)
  2265.  
  2266.      Compile time options required for various operating systems
  2267.      are described in the source file.
  2268.  
  2269. VMS VERSION
  2270.      The VMS version does not transmit the file date.  The VMS
  2271.      version calculates the file length by reading the file and
  2272.      counting the bytes.
  2273.  
  2274.      The VMS version does not support YMODEM-g or ZMODEM.
  2275.  
  2276.      When VMS is lightly loaded, the response time may be too
  2277.      quick for MODEM7 unless the MODEM7 q modifier is used.
  2278.  
  2279.      The VMS C standard i/o package and RMS sometimes interact to
  2280.      modify file contents unexpectedly.
  2281.  
  2282. FILES
  2283.      32 bit CRC code courtesy Gary S. Brown.
  2284.  
  2285.      sz.c, rbsb.c, zm.c, zmodem.h source files
  2286.  
  2287.      /tmp/szlog stores debugging output (sz -vv)
  2288.  
  2289. TESTING FEATURE
  2290.      The command "sz -T file" exercises the Attn sequence error
  2291.      recovery by commanding errors with unterminated packets.
  2292.      The receiving program should complain five times about
  2293.      binary data packets being too long.  Each time sz is inter-
  2294.      rupted, it should send a ZDATA header followed by another
  2295.      defective packet.  If the receiver does not detect five long
  2296.      data packets, the Attn sequence is not interrupting the
  2297.      sender, and the Myattn string in sz.c must be modified.
  2298.  
  2299.      After 5 packets, sz stops the "transfer" and prints the
  2300.      total number of characters "sent" (Tcount).  The difference
  2301.      between Tcount and 5120 represents the number of characters
  2302.      stored in various buffers when the Attn sequence is gen-
  2303.      erated.
  2304.  
  2305.  
  2306.  
  2307. Printed 3/29/88               OMEN                              5
  2308.  
  2309.  
  2310.  
  2311.  
  2312.  
  2313.  
  2314. SZ(1)               UNIX Programmer's Manual                SZ(1)
  2315.  
  2316.  
  2317.  
  2318. BUGS
  2319.      Calling sz from most versions of cu(1) doesn't work because
  2320.      cu's receive process fights sz for characters from the
  2321.      modem.
  2322.  
  2323.      Programs that do not properly implement the specified file
  2324.      transfer protocol may cause sz to "hang" the port for a
  2325.      minute or two.  Every reported instance of this problem has
  2326.      been corrected by using ZCOMM, Pro-YAM, or other program
  2327.      with a correct implementation of the specified protocol.
  2328.  
  2329.      Many programs claiming to support YMODEM only support XMODEM
  2330.      with 1k blocks, and they often don't get that quite right.
  2331.  
  2332.      XMODEM transfers add up to 127 garbage bytes per file.
  2333.      XMODEM-1k and YMODEM-1k transfers use 128 byte blocks to
  2334.      avoid extra padding.
  2335.  
  2336.      YMODEM programs use the file length transmitted at the
  2337.      beginning of the transfer to prune the file to the correct
  2338.      length; this may cause problems with source files that grow
  2339.      during the course of the transfer.  This problem does not
  2340.      pertain to ZMODEM transfers, which preserve the exact file
  2341.      length unconditionally.
  2342.  
  2343.      Most ZMODEM options are merely passed to the receiving pro-
  2344.      gram; some do not implement all these options.
  2345.  
  2346.      Circular buffering and a ZMODEM sliding window should be
  2347.      used when input is from pipes instead of acknowledging
  2348.      frames each 1024 bytes.  If no files can be opened, sz sends
  2349.      a ZMODEM command to echo a suitable complaint; perhaps it
  2350.      should check for the presence of at least one accessible
  2351.      file before getting hot and bothered.  The test mode leaves
  2352.      a zero length file on the receiving system.
  2353.  
  2354.      A few high speed modems have a firmware bug that drops char-
  2355.      acters when the direction of high speed transmissson is
  2356.      reversed.  The environment variable ZNULLS may be used to
  2357.      specify the number of nulls to send before a ZDATA frame.
  2358.      Values of 101 for a 4.77 mHz PC and 124 for an AT are typi-
  2359.      cal.
  2360.  
  2361.  
  2362.  
  2363.  
  2364.  
  2365.  
  2366.  
  2367.  
  2368.  
  2369.  
  2370.  
  2371.  
  2372.  
  2373. Printed 3/29/88               OMEN                              6
  2374.  
  2375.  
  2376.  
  2377.